home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Best of MacTutor - S…e Code for Volumes 1 to 5
/
The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin
/
Source Code
/
#03 (Aug85-Sep85)
/
asm
/
asm MDS Print Vol. 1 #10
/
MDSPRINT.ASM
next >
Wrap
Assembly Source File
|
1985-08-13
|
6KB
|
179 lines
; Print "hello" on the printer.
; Written by Steve Yaeger
; If the printer is off-line, this will hang the Mac
; until it is put back on line
; If there is no Printdriver file it just Beeps and exits
;
; The Linker file looks like this
;
; HELLO.REL
; ]
;
; These are the Equates Notice that the iPrReset, iPrLineFeed,
; and iPrPageEnd are Longwords and not words as in
; PREQU.TXT from Counsulair.
XREF START
; These are the PrDrvr constants.
iPrDrvrRef EQU $FFFD ; Driver's RefNum = NOT ResID
iPrIOCtl EQU 5 ; The Raw Byte IO Proc's ctl #
iPrDevCtl EQU 7 ; The PrDevCtl Proc's ctl #
iPrReset EQU $00010000 ; The CParam for res
iPrPageEnd EQU $00020000 ; The CParam for end
iPrLineFeed EQU $00030000 ; The CParam for pap
lParam1 EQU 0 ; the three printer parameters
lParam2 EQU 4
lParam3 EQU 8
; These are the standard call parameters
csCode EQU $1A ;control dependent command
csParam EQU $1C ;control dependent param.
ioCompletion EQU $C ;pointer to async notifier routine
ioResult EQU $10 ;returns operation results
ioFileName EQU $12 ;pointer to name of driver
ioRefNum EQU $18 ;driver reference #
ioPermssn EQU $1B ;read/write permission
; Traps used in this program
.TRAP _InitGraf $A86E
.TRAP _InitFonts $A8FE
.TRAP _FlushEvents $A050
.TRAP _InitWindows $A912
.TRAP _InitMenus $A930
.TRAP _InitDialogs $A97B
.TRAP _InitCursor $A850
.TRAP _TEInit $A9CC
.TRAP _Open $A000
.TRAP _Control $A004
.TRAP _SysBeep $A9C8
START
;Initialize Managers
PEA -4(A5) ;Space Created For Quickdraw's Use
_InitGraf ;Init Quickdraw
_InitFonts ;Init the Font Manager
MOVE.L #$0000FFFF,D0 ;This Mask Is For All Events
_FlushEvents ;Flush All Of These Events
_InitWindows ;Init the Window Manager
_InitMenus ;Init the Menu Manager
CLR.L -(SP) ;restart procedure
_InitDialogs ;Init the Dialog Manager
_InitCursor ;Init to arrow cursor
_TEInit ;Init Text Edit
;------- OPEN THE PRINT DRIVER -------
LEA '.Print',A1 ;Get a Pointer to the Drivers Name
LEA IOPARMS,A0 ;Get the Parameter base addres
MOVE.L A1,ioFileName(A0) ;Store the Drivers Name addr
CLR.B ioPermssn(A0) ;fsCurPerm (whatever we got)
_OPEN
LEA IOPARMS,A0 ;Get the Parameter base address
MOVE.W ioResult(A0),D0 ;Check for an error
CMP.W #0,D0 ;is result ok?
BEQ @0 ;Yes skip the error bell
MOVE.W #30,-(SP) ;beep length
_SYSBEEP ;beep to indicate error
BRA @4
@0
;------ RESET THE PRINTER TO DEFAULTS -------
LEA IOPARMS,A0 ;Get the Parameter base addr
MOVE.W #iPrDevCtl,csCode(A0) ;Set up a control type call
MOVE.L #iPrReset,csParam+lParam1(A0) ;only 1 (Reset)
CLR.L csParam+lParam2(A0)
CLR.L csParam+lParam3(A0)
_CONTROL
LEA IOPARMS,A0 ;Get the Parameter base address
MOVE.W ioResult(A0),D0 ;Check for an error
CMP.W #0,D0 ;is result ok?
BEQ @1 ;Yes skip the error bell
MOVE.W #30,-(SP) ;beep length
_SYSBEEP ;beep to indicate error
BRA @4
@1
;------ ACTUALLY PRINT THE WORD HELLO -------
LEA TEXT_STRING,A1 ;Get address of string to pr
LEA IOPARMS,A0 ;Get the Parameter base addres
MOVE.W #iPrIOCtl,csCode(A0) ;Set up a text streaming call
MOVE.L A1,csParam+lParam1(A0) ;Parameter one is a pointer to the text
MOVE.L #(TEXT_STRING_END-TEXT_STRING), csParam+lParam2(A0)
;Parameter two is the length of the text
CLR.L csParam+lParam3(A0) ;No third Parameter
_CONTROL
LEA IOPARMS,A0 ;Get the Parameter base address
MOVE.W ioResult(A0),D0 ;Check for an error
CMP.W #0,D0 ;is result ok?
BEQ @2 ;Yes skip the error bell
MOVE.W #30,-(SP) ;beep length
_SYSBEEP ;beep to indicate error
BRA @4
@2
;------ PRINT A CR+LF JUST FOR THE FUN OF IT --------
LEA IOPARMS,A0 ;Get the Parameter base addres
MOVE.W #iPrDevCtl,csCode(A0) ;Set up a control type call
MOVE.L #iPrLineFeed,csParam+lParam1(A0) ;only 1? parameter (CR+LF)
CLR.L csParam+lParam2(A0) ;Parameter 2 undetermined
CLR.L csParam+lParam3(A0)
_CONTROL
LEA IOPARMS,A0 ;Get the Parameter base address
MOVE.W ioResult(A0),D0 ;Check for an error
CMP.W #0,D0 ;is result ok?
BEQ @3 ;Yes skip the error bell
MOVE.W #30,-(SP) ;beep length
_SYSBEEP ;beep to indicate error
BRA @4
@3
;---- EJECT A PAGE SO THAT WE CAN SEE WHAT HAPPENS
LEA IOPARMS,A0 ;Get the Parameter base address
MOVE.W #iPrDevCtl,csCode(A0) ;Set up a control type call
MOVE.L #iPrPageEnd,csParam+lParam1(A0) ;only 1 parameter (eject)
CLR.L csParam+lParam2(A0)
CLR.L csParam+lParam3(A0)
_CONTROL
LEA IOPARMS,A0 ;Get the Parameter base address
MOVE.W ioResult(A0),D0 ;Check for an error
CMP.W #0,D0 ;is result ok?
BEQ.S @4 ;Yes skip the error bell
MOVE.W #30,-(SP) ;beep length
_SYSBEEP ;beep to indicate error
@4
RTS
; Data Structures
TEXT_STRING DC.B ' HELLO'
TEXT_STRING_END
.ALIGN 2
IOPARMS DCB.L 20,0
; ------------------ end of program -----------------------